
package com.controller.common;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
/**
 * ElemenetType.CONSTRUCTOR 构造器声明 ElemenetType.FIELD 域声明(包括 enum 实例)
 * ElemenetType.LOCAL_VARIABLE 局部变量声明 ElemenetType.METHOD 方法声明
 * ElemenetType.PACKAGE 包声明 ElemenetType.PARAMETER 参数声明 ElemenetType.TYPE
 * 类，接口(包括注解类型)或enum声明
 */
@Target({ ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.TYPE, ElementType.FIELD })
// 定义注解的作用范围字段、枚举的常量/方法
@Documented
/**
 * 查询条件注解
 * @author gmsd100
 *
 */
public @interface FieldSearch {

	/**
	 * 查询语句 例子(select * from table_name_1 where 1=1) 
	 * (select * from table_name_1  tab_1 left jion table_name_2 tab_2 on tab_1.id=tab_2.id where 1=1)
	 * 默认单表查询生成Hql语言
	 * @return
	 */
	String selectTabSql() default "";

	/**
	 * 查询条件的类型(like,=,>=,<,<=等)
	 * 默认使用=
	 * @return
	 */
	String searchType() default "=";

	/**
	 * 要查找的字段名称,如果多表查询必须带上表的别名比如tab表的name字段,那就表示tab.name
	 * 如果在比如对象name的对象上使用注解,当fileName不设置时默认使用name来做数据库存查询字段
	 * @FieldSearch
	 * Stirng name
	 * @return
	 */
	String filedName() default "";

	/**
	 * 开始符号 主要用于特殊查询比如in()
	 * 
	 * @return
	 */
	String startSymbol() default "'";

	/**
	 * 结束符号 主要用于特殊查询比如in()
	 * 
	 * @return
	 */
	String endSymbol() default "'";

	/**
	 * 排序类型(desc,asc)
	 * 当数据要进行排序设置该值
	 * @return
	 */
	String order() default "";

	/**
	 * 分组字段 默认值false,如果是true表示该字段要做分组,false表示不要
	 * 当数据要进行分组显示设置该值
	 * @return
	 */
	boolean group() default false;

	/**
	 * 聚合字段 例子(having count(1)>10)
	 * 当数据要进行聚合显示设置该值
	 * @return
	 */
	String hav() default "";
	
}
